Classe System.Collections.ObjectModel.ObservableCollection<T>

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

La ObservableCollection<T> classe rappresenta una raccolta di dati dinamica che fornisce notifiche quando gli elementi vengono aggiunti o rimossi o quando viene aggiornato l'intero elenco.

In molti casi, i dati usati sono una raccolta di oggetti. Ad esempio, uno scenario comune nel data binding consiste nell'usare un ItemsControl oggetto, ListBoxad esempio , ListViewo TreeView per visualizzare una raccolta di record.

È possibile eseguire l'enumerazione su qualsiasi raccolta che implementa l'interfaccia IEnumerable. Tuttavia, per configurare binding dinamici in modo che gli inserimenti o le eliminazioni di elementi nella raccolta comportino l'aggiornamento automatico dell'interfaccia utente, la raccolta deve implementare l'interfaccia INotifyCollectionChanged. Questa interfaccia espone l'evento CollectionChanged , un evento che deve essere generato ogni volta che cambia la raccolta sottostante.

La ObservableCollection<T> classe è un tipo di raccolta dati che implementa l'interfaccia INotifyCollectionChanged .

Prima di implementare una raccolta personalizzata, è consigliabile usare ObservableCollection<T> o una delle classi di raccolta esistenti, ad esempio List<T>, Collection<T>, BindingList<T> e così via. Se si ha uno scenario avanzato e si vuole implementare una raccolta personalizzata, è consigliabile usare IList, che fornisce una raccolta non generica di oggetti a cui è possibile accedere singolarmente in base all'indice. L'implementazione IList offre prestazioni ottimali con il motore di data binding.

Nota

Per supportare completamente il trasferimento di valori di dati da oggetti di origine di associazione a destinazioni di associazione, ogni oggetto della raccolta che supporta le proprietà associabili deve implementare un meccanismo di notifica di modifica delle proprietà appropriato, ad esempio l'interfaccia INotifyPropertyChanged .

Per altre informazioni, vedere "Binding alle raccolte" in Panoramica del data binding.

Note sull'utilizzo di XAML

ObservableCollection<T> può essere usato come elemento oggetto XAML in Windows Presentation Foundation (WPF), nelle versioni 3.0 e 3.5. Tuttavia, l'utilizzo presenta limitazioni sostanziali.

  • ObservableCollection<T> deve essere l'elemento radice, perché l'attributo x:TypeArguments che deve essere utilizzato per specificare il tipo vincolato del generico ObservableCollection<T> è supportato solo nell'elemento oggetto per l'elemento radice.

  • Devi dichiarare un x:Class attributo (che comporta che l'azione di compilazione per questo file XAML deve essere Page o un'altra azione di compilazione che compila il codice XAML).

  • ObservableCollection<T> si trova in uno spazio dei nomi e in un assembly non mappati inizialmente allo spazio dei nomi XML predefinito. È necessario eseguire il mapping di un prefisso per lo spazio dei nomi e l'assembly e quindi usare tale prefisso nel tag dell'elemento oggetto per ObservableCollection<T>.

Un modo più semplice per usare ObservableCollection<T> le funzionalità da XAML in un'applicazione consiste nel dichiarare la propria classe di raccolta personalizzata non generica che deriva da ObservableCollection<T>e la vincola a un tipo specifico. Eseguire quindi il mapping dell'assembly che contiene questa classe e farvi riferimento come elemento oggetto nel codice XAML.